package com.example.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

@WebServlet("/download")
public class DownloadServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req,
                         HttpServletResponse resp)
            throws ServletException, IOException {
        // 读取一个固定的文件，输入流只有一个核心方法：读取
        InputStream is = new
                FileInputStream("F:\\课堂\\高级Java框架项目开发\\课件\\第1章 初识MyBatis框架.pptx");
        // 下载是一种特殊的响应方式，构建响应输出流，输出流只有一个核心方法：写入
        ServletOutputStream os =
                resp.getOutputStream();
        // 设置下载响应头, filename是浏览器下载时默认的文件名称
        // 中文文件命名需要url转编码
        String filename = URLEncoder.encode("第1章 初识MyBatis框架.pptx",
                StandardCharsets.UTF_8);
        resp.setHeader("Content-Disposition",
                "attachment; filename=" + filename);
        byte[] bytes = is.readAllBytes(); // 内容
        os.write(bytes); // 这就在响应
        os.flush();
        os.close();
        is.close();
    }
}
